﻿// Mr. Rito Post Office Aizu - 2200.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>

using namespace std;
//https://vjudge.csgrandeur.cn/problem/Aizu-2200

/*
问题 D：
你是一名程序员，在一个偏远岛屿上的邮局工作。 您所在的地区由几个岛屿组成。 每个岛屿都有一个或多个港口城市。 
除此之外，可能还有其他城镇和村庄。 从一个岛到另一个岛，您必须乘船。 环岛旅行可以从陆路前往，但有时从海上前往更为快捷。

最近，邮局私有化导致全国范围内邮差人数减少，以降低成本。 偏远岛屿上的邮局也不例外，因此里托先生是唯一的邮递员。
邮局负责收送邮件的区域非常大，一个人收送邮件非常辛苦。 因此，里托先生请求你们帮助寻找一种方法，使收信和投递过程更有效率。

你的任务是编写一个程序，根据收集和分发邮件的城镇和村庄顺序，找出最短的路线。

里托先生不能按照指定顺序以外的任何顺序执行收货和发货工作。 不过，在从一个城镇或村庄前往另一个城镇或村庄时，他可以穿越其他城镇和村庄。 
此外，Rito 先生还有一艘船，可以在各岛屿之间穿梭。

例如，如果取货和送货的顺序是 A 镇、B 镇和 C 村，那么在从 A 镇到 B 镇的途中，他可以经过任何一个镇或村。 
在这种情况下，船只也可以经过 C 村，但为了保持取货和交货顺序，船只必须到 B 镇取货和交货一次，然后再到 C 村取货和交货一次。 
如果船只从 A 镇经由海路前往 B 镇，再从 B 镇经由陆路前往 C 村，则船只仍停留在 B 镇。 因此，该船下次想走海路时必须返回 B 镇。

在某些情况下，一个城镇或村庄可能需要进行多次取货和交货。 例如，取货和送货的顺序可能是 A 镇、B 村、C 镇、B 村。 
在这种情况下，如果玩家从 A 镇前往 C 镇而不经过 B 村，他就无法立即在 C 镇进行收货和发货。 
原因是在 B 村的第一次取货和送货尚未完成。 如果他在 C 镇领取和分发后又去了 B 村，并不意味着他已经完成了在 B 村的第一次领取和分发。

里托先生一开始总是和他的船在某个港口城市。 由于里托先生是一名老手，因此可以忽略除旅行时间以外的收集和分发时间。 
只需考虑在最后一个城镇或村庄完成收件和派件操作所需的时间，而无需考虑将船返回原位和返回邮局所需的时间。

输入。
输入由多个数据集组成。 每个数据集的格式如下

N M
x1 y1 t1 sl1
x2 y2 t2 sl2
...
xM yM tM slM
R
z1 z2 ... zR
数据集中的所有输入项均为非负整数。 一行中的输入项之间用一个空格隔开。

第一行指定海陆网络的大小。
N（2 ≤ N ≤ 200）是城镇或村庄的数量。每个城镇或村庄都有一个从 1 到 N 的唯一编号。M（1 ≤ M ≤ 10000）是陆路和海路的总数。
第 2 至 1 + M 行是陆路或海路的说明。xi 和 yi（1≤xi，yi ≤N）是两端城镇或村庄的编号。ti （1 ≤ ti ≤ 1000）是该陆路或海路的旅行时间。
sli 为 "L "或 "S"，其中 L 和 S 分别代表陆路和海路。

直接连接两个城镇或村庄的陆路或海路可能不止一条。每条陆路或海路都是双向的，即可以朝任一方向行驶。
M + 2 行中的 R（1 ≤ R ≤ 1000）表示里托先生负责的收货点和发货点的数量。M + 3 中包含 R 个数字 zi（1 ≤ zi ≤ N），按取货和交货的顺序排列城镇和村庄。
最初，里托和船都在港口城市 z1。从初始状态开始，总是可以通过某种方式移动到目的地城镇或村庄。

输入结束的标志是一行包含两个 0 的空格。
输出。
针对输入中的每个数据集，按照给定的取货和送货顺序，找出 Rito 绕城镇和村庄移动所需的最短旅行时间，并在一行中输出。

Sample Input
3 3
1 2 5 L
1 2 7 S
2 3 11 S
3
1 2 3
5 5
1 2 15 L
2 3 10 L
4 5 7 L
1 3 30 S
3 4 100 S
5
1 3 5 4 1
0 0
Output for the Sample Input
18
269

*/


int main()
{


	return 0;
}
 